package org.example.service.impl;


import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.yulichang.toolkit.JoinWrappers;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.example.mapper.OrderMapper;
import org.example.pojo.Order;
import org.example.pojo.User;
import org.example.pojo.UserOrder;
import org.example.service.IOrderService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;


@Service
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements IOrderService {
    @Resource
    private OrderMapper orderMapper;

    @Override
    public List<UserOrder> getUserOrderList() {
        //定义查询时主表的MPJLambdaWrapper，以此来调用（可认为调用谁的Mapper，谁就是主表）
        MPJLambdaWrapper<Order> wrapper = JoinWrappers.lambda(Order.class);
        //查询订单表中所有的字段
        wrapper.selectAll(Order.class)
                //查询用户表里面的name和phone
                .select(User::getName,User::getPhone)
                //关联用户表，条件为关键表用户表的id与订单表的userId
                .leftJoin(User.class,User::getId,Order::getUserId);
        //执行查询，并返回自定义的返回实体类型
        List<UserOrder> userOrderList=orderMapper.selectJoinList(UserOrder.class, wrapper);
        return userOrderList;
    }

    @Override
    public Page<UserOrder> getUserOrderListPage() {
        //定义查询时主表的MPJLambdaWrapper，以此来调用（可认为调用谁的Mapper，谁就是主表）
        MPJLambdaWrapper<Order> wrapper = new MPJLambdaWrapper<>();
        //查询订单表中所有的字段
        wrapper.selectAll(Order.class)
                //查询用户表里面的name和phone
                .select(User::getName,User::getPhone)
                //关联用户表，条件为关键表用户表的id与订单表的userId
                .leftJoin(User.class,User::getId,Order::getUserId);
        //执行分页查询，并返回自定义的返回实体类型（这块注意：需要启用 mybatis plus 分页插件）
        Page<UserOrder> listPage=orderMapper.selectJoinPage(new Page<>(1, 10),UserOrder.class, wrapper);
        return listPage;
    }

    @Override
    public List<UserOrder> getOrderOfUserId(Integer userId) {
        //定义查询时主表的MPJLambdaWrapper，以此来调用（可认为调用谁的Mapper，谁就是主表）
        MPJLambdaWrapper<Order> wrapper = new MPJLambdaWrapper<>();
        //查询订单表中所有的字段
        wrapper.selectAll(Order.class)
                //查询用户表里面的name和phone
                .select(User::getName,User::getPhone)
                //关联用户表，条件为关键表用户表的id与订单表的userId
                .leftJoin(User.class,User::getId,Order::getUserId)
                //拼接查询条件userId
                .eq(Order::getUserId,userId);
        //执行查询，并返回自定义的返回实体类型
        List<UserOrder> userOrderList=orderMapper.selectJoinList(UserOrder.class, wrapper);
        return userOrderList;
    }
}
